﻿$.fn.dataTableExt.oApi.fhSMcloms = function ( oSettings , dom, hideArr, noselctArr, selectArr ) {
	//console.log(this.oApi)
	//console.dir(oSettings.aoData);
	//dom 显示隐藏按钮
	//hideArr 强制隐藏的列和控制块
	//noselctArr 不需要选中的控制块
	//selectArr 需要选中的控制块
	
	var otable = this;
	var bnoctl = [0,otable.find('tr th').size()-1];//全选列和状态列 隐藏控制块
	
	var aHideItem=$.merge(bnoctl,hideArr);//所有需要隐藏的控制块
	
	noselctArr = noselctArr || [];//未选中的控制块
	
	hideArr = $.merge(hideArr,noselctArr);//所有需要隐藏的lie
	
	selectArr = selectArr || [];
	
	//console.log(bnoctl);
	if($('#cltSM').length==0){
		
		if($('.dataTables_length')[0] && $('.dataTables_filter')[0]){
			var wrap=$('<div class="layout" />');
			wrap.insertBefore($('.dataTables_length'));
			$('.dataTables_length').appendTo(wrap);
			$('.dataTables_filter').appendTo(wrap);
		}

		var cltSM = $('<div id="cltSM" class="layout" />');
			
		$.each(oSettings.aoColumns,function(arrindex,arrvalue){

			var li = $('<li />');
			li.addClass('nos select');
			li.html('<input type="checkbox" checked />'+arrvalue.sTitle);

			li.data('inum',arrindex);

			cltSM.append(li);
			
			li.bind('click',function(){

				if ($(this).hasClass('select')){
					//没选中
					$(this).removeClass('select');
					$(this).find('.cbox').removeClass('checked');
					$(this).find(':checkbox').removeAttr('checked');
					showorhidecolumns($(this).data('inum'),false);					
					
				}else {
					//console.log('选中');
					$(this).addClass('select');
					$(this).find('.cbox').addClass('checked');
					$(this).find(':checkbox').attr('checked','checked');
					
					showorhidecolumns($(this).data('inum'),true)
					
				}
			
			});
			
		})

		cltSM.insertAfter($('.dataTables_filter')).hide();

		dom.on('click',function(){
			cltSM.slideToggle();
		})
		
	}else{
	
		cltSM=$('#cltSM');
		
		cltSM.find('li').each(function(){
			if(!$(this).hasClass('select')){
				hideArr.push($(this).data('inum'));
			}
		});
		
	}
	
	unselect(noselctArr); //不需要选中的控制块				
	hideSMitem(aHideItem);//隐藏控制块	
	hideclomus(hideArr);//隐藏咧
	selectAndAhowAols(selectArr); //需要选中的控制块 和 需要显示的列
	
	//隐藏不需要展示的控制项
	function hideSMitem(arr){
	
		cltSM.find('li').show();
		
		if(arr!=undefined&&arr.length>0){
		
			for(var c=0,clen=arr.length;c<clen;c++){

				cltSM.find('li').eq(arr[c]).hide();
				
			}
			
		}
	
	}
	
	//不需要选中的控制块
	function unselect(arr){
	
		if(arr!=undefined&&arr.length>0){
		
			$.each(arr,function(index,value){
				cltSM.find('li').eq(value).removeClass('select').find(':checkbox').removeAttr('checked');
			})
			
		}
		
		
	}
	
	//隐藏列
	function hideclomus(arry){
		otable = $('.dataTable');
		otable.find('tr th').show();
		
		if(oSettings.aoData.length==0){
		
			if(arry!=undefined&&arry.length>0){
		
				for(var c=0,clen=arry.length;c<clen;c++){
									
					otable.find('tr th').eq(arry[c]).hide();
	
				}
				
			}
		}

		$.each(oSettings.aoData,function(rowindex,rowdata){
		
			var tds = $(rowdata.nTr).find('td');
			
			tds.show();
			
			if(arry!=undefined&&arry.length>0){
		
				for(var v=0,vlen=arry.length;v<vlen;v++){
				
					if(rowindex==0){
						otable.find('tr th').eq(arry[v]).hide();
					}

					tds.eq(arry[v]).hide();
					
				}
				
			}
		})
	
	}
	
	//显示或者隐藏某一列
	function showorhidecolumns(num,bol){		
		
		var curth = otable.find('tr').find('th').eq(num);
		
		
		if(bol) curth.show();
		else curth.hide();

		$.each(oSettings.aoData,function(rowindex,rowdata){
			var curtd = $(rowdata.nTr).find('td').eq(num);
			if(bol) curtd.show();
			else curtd.hide();
		})


	}

	function selectAndAhowAols(arr){
		if(arr.length>0){
		
			$.each(arr,function(index,value){
				cltSM.find('li').eq(value).addClass('select').find(':checkbox').attr('checked','checked');

				otable.find('tr th').eq(value).show();				
				
				
				$.each(oSettings.aoData,function(rowindex,rowdata){
					var tds = $(rowdata.nTr).find('td');

					tds.eq(value).show();

				})
				
			});
			
			
			
		}
	}

}